Skip to content

MCP是什么?与Function Call的关系是什么?

本节目标

  • 了解MCP(Model Context Protocol)的概念和核心功能
  • 理解MCP与Function Call的区别与联系
  • 掌握MCP的工作原理和核心组件
  • 认识MCP在AI开发中的重要性和应用价值

MCP概述

什么是MCP

MCP(Model Context Protocol,模型上下文协议)是一种开放标准协议,由Anthropic于2024年推出,它使应用程序能够为大语言模型(LLM)提供标准化的上下文。MCP创建了一种结构化方式,使LLM能够与各种外部数据源和工具进行交互和访问。

类比理解:可以将MCP比作AI应用的USB-C接口。正如USB-C为设备连接各种外设提供了标准化方式,MCP为AI模型连接不同的数据源和工具提供了标准化的方式,极大地扩展了AI系统的能力范围。

MCP的核心价值

MCP的推出解决了AI模型与外部世界交互时面临的几个关键挑战:

  1. 功能扩展:使AI模型能够访问实时数据、执行特定操作,超越其训练数据的限制
  2. 标准化通信:提供统一的通信接口,降低集成复杂性
  3. 工具重用:确保开发的工具可以在不同的AI应用中重复使用
  4. 跨模型兼容:使不同提供商的AI模型可以使用相同的工具集

MCP的技术架构

MCP的基本架构由以下核心组件构成:

  1. MCP主机端(Host):希望通过MCP访问数据的程序,如Claude桌面应用、集成开发环境(IDE)或AI工具
  2. MCP客户端(Client):与服务器保持一对一连接的协议客户端
  3. MCP服务端(Server):通过标准化模型上下文协议暴露特定功能的轻量级程序
  4. 本地数据源:可被MCP服务端安全访问的计算机文件、数据库及本地服务
  5. 远程服务:可通过互联网(如API接口)连接的外部系统

MCP架构

MCP与Function Call的关系

在深入理解MCP前,让我们先回顾Function Call的概念,并探讨两者之间的联系与区别。

Function Call回顾

Function Call(函数调用)是大语言模型的一项能力,它允许模型识别需要调用外部函数的情况,并生成结构化的函数调用请求,包括函数名称和参数。这使得模型能够:

  1. 与外部API交互:如查询天气、搜索网页、查询数据库等
  2. 执行特定任务:如数学计算、格式转换等
  3. 返回结构化数据:确保输出满足预定义的格式要求

以下是Function Call的基本工作流程:

  1. 开发者定义可用的函数及其参数规范
  2. 用户发起请求
  3. 模型决定是否调用函数以及调用哪个函数
  4. 模型生成符合函数要求的参数
  5. 应用程序执行相应的函数
  6. 结果返回给模型,模型继续对话
python
# Function Call示例代码
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,如'北京'、'上海'等"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
    tools=tools
)

MCP与Function Call的区别

MCP和Function Call虽然都旨在扩展AI模型的能力,但它们在本质上有明显区别:

特性Function CallMCP
目的将用户提示转换为结构化函数调用标准化执行和响应处理
控制方LLM提供商(如OpenAI、Anthropic、Google)处理LLM集成的外部系统
输出格式各LLM厂商格式不同(基于JSON)使用标准化协议(如JSON-RPC)
灵活性不同模型的函数调用结构不同确保多个工具间的互操作性
关系相当于"下订单"负责"执行任务"

MCP作为Function Call的补充

可以将MCP视为Function Call的自然补充:

  1. Function Call解决了"任务识别和转换"问题:帮助AI将用户自然语言转换为结构化命令。

  2. MCP解决了"任务执行和标准化"问题:提供了一种标准化方式,确保函数调用被一致地执行和处理。

下面是MCP的一个简单示例,展示了它如何处理工具调用:

json
{
  "jsonrpc": "2.0",
  "id": 129,
  "method": "tools/call",
  "params": {
    "name": "get_current_stock_price",
    "arguments": {
      "company": "AAPL",
      "format": "USD"
    }
  }
}

MCP的工作原理

MCP的通信流程

MCP的通信流程包括以下步骤:

  1. 初始化:LLM应用程序启动MCP客户端,客户端连接所需的MCP服务器
  2. 服务发现:客户端识别服务器提供的工具和功能
  3. 请求转发:当LLM需要使用外部工具时,请求通过客户端转发到相应的服务器
  4. 功能执行:服务器执行请求的功能并返回结果
  5. 结果处理:结果通过客户端返回给LLM,LLM继续处理和生成响应

MCP的关键组件

MCP框架包含几个关键组件,使其成为灵活且强大的协议:

  1. 资源(Resources):为LLM提供数据以增加上下文。例如,资源可以是磁盘上的文件、数据库模式或查询结果,或API。MCP资源可以是静态的,也可以通过URI模板实现动态访问。

  2. 工具(Tools):使AI能够执行操作。这些可能是数据库查询执行、文件系统操作或对外部API的访问。

  3. 采样(Sampling):允许服务器请求来自LLM的补全内容,实现更复杂的交互。

  4. 传输(Transports):MCP的通信机制,确保客户端和服务器之间的稳定连接。

MCP的实际应用

案例:文件系统访问

使用MCP连接文件系统,AI助手可以执行以下操作:

  • 读取本地文件内容
  • 创建和编辑文件
  • 列出目录内容
  • 搜索特定文件

这使得用户可以通过自然语言指令管理和操作本地文件系统,而无需直接命令行或文件管理器操作。

案例:数据库查询

通过MCP,AI可以安全地访问数据库:

  • 执行SQL查询
  • 获取数据库模式信息
  • 分析查询结果
  • 生成数据可视化描述

这样,用户可以使用自然语言询问数据相关问题,而无需了解SQL语法或数据库结构。

案例:多工具协作

MCP允许AI同时使用多种工具协同工作,例如:

  • 使用网络搜索获取最新信息
  • 访问数据库查询历史数据
  • 调用计算工具进行分析
  • 使用可视化工具生成图表
  • 将结果保存到文档系统

这种多工具协作使AI能够处理复杂的、跨领域的任务,大大扩展了其应用范围。

MCP资源

官方文档:https://modelcontextprotocol.io/introduction

官方mcp:https://github.com/modelcontextprotocol/servers

MCP.SO:https://mcp.so/ 阿里云百炼: https://bailian.console.aliyun.com/?spm=5176.29619931.J__Z58Z6CX7MY__Ll8p1ZOR.1.74cd521cpQJhl9&tab=mcp#/mcp-market

cursor.directory:https://cursor.directory/mcp

HiMCP:https://himcp.ai/

Smithery.ai:https://smithery.ai/

Cline's MCP Marketplace: https://cline.bot/mcp-marketplace

shareMCP:https://github.com/AmeSoraQwQ/ShareMCP

MCP Hub:https://mcphub.io/

MCP Servers:https://mcpservers.org/

Awesome MCP Servers: https://github.com/punkpeye/awesome-mcp-servers